/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 晓星航
 * Date: 2023-11-28
 * Time: 10:12
 */
import java.util.Arrays;
public class ResourceAllocation {
    public static void main(String[] args) {
        // 资源数量
        int n = 10;

        // 项目数量
        int m = 4;

        // 每个项目的利润函数
        int[][] profits = {
                {2, 5, 7, 3},   // 项目1的利润函数
                {4, 6, 8, 2},   // 项目2的利润函数
                {3, 5, 6, 4},   // 项目3的利润函数
                {1, 2, 3, 4}    // 项目4的利润函数
        };

        // 计算总利润最大的资源分配方案
        int[] allocation = allocateResources(n, m, profits);

        // 输出结果
        System.out.println("最大总利润：" + calculateTotalProfit(allocation, profits));
        System.out.println("资源分配方案：" + Arrays.toString(allocation));
    }

    // 计算总利润最大的资源分配方案
    public static int[] allocateResources(int n, int m, int[][] profits) {
        // 初始化资源分配方案为0
        int[] allocation = new int[m];

        // 遍历每个项目
        for (int i = 0; i < m; i++) {
            // 初始化当前项目的最大利润和对应的资源分配方案
            int maxProfit = 0;
            int[] maxAllocation = new int[m];

            // 遍历资源数量
            for (int j = 1; j <= n; j++) {
                // 计算当前资源分配下的利润
                int[] tempAllocation = Arrays.copyOf(allocation, m);
                tempAllocation[i] = j;
                int profit = calculateTotalProfit(tempAllocation, profits);

                // 更新最大利润和对应的资源分配方案
                if (profit > maxProfit) {
                    maxProfit = profit;
                    maxAllocation = Arrays.copyOf(tempAllocation, m);
                }
            }

            // 将当前项目的最大利润和对应的资源分配方案更新到整体分配方案中
            allocation = Arrays.copyOf(maxAllocation, m);
        }

        return allocation;
    }

    // 计算给定资源分配方案的总利润
    public static int calculateTotalProfit(int[] allocation, int[][] profits) {
        int totalProfit = 0;

        for (int i = 0; i < allocation.length; i++) {
            totalProfit += profits[i][i];
        }

        return totalProfit;
    }
}
